package mysql

import (
	"GoWeb_Advanced/10_web_app2/settings"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
	"go.uber.org/zap"
)

var db *sqlx.DB

func Init(config *settings.MySQLConfig) (err error) {
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True",
		config.User,
		config.Password,
		config.Host,
		config.Port,
		config.DbName,
	)
	//也可以设置 MustConnect 连接不成功就 panic，而 Connect 会返回 err 让我们自己去处理错误
	db, err = sqlx.Connect("mysql", dsn) //Connect 默认就是 Open() + Ping()
	if err != nil {
		zap.L().Error("connect DB failed", zap.Error(err))
		return
	}
	db.SetMaxOpenConns(config.MaxOpenConns) //最大连接数
	db.SetMaxIdleConns(config.MaxIdleConns) //最大空闲连接数

	return
}

func Close() {
	_ = db.Close()
}
